package demo08CollectionFramework;

import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:咭咭熊
 * Date:2021 - 10 - 12
 * Time:15:38
 */
class Student{
    public String name;
    public String classes;
    public Double score;

    public Student(String name, String classes, Double score) {
        this.name = name;
        this.classes = classes;
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", classes='" + classes + '\'' +
                ", score=" + score +
                '}';
    }
}
public class TestCollection2 {
    public static void main(String[] args) {
        String ret = func2("welcome to java","come");
        System.out.println(ret);//wl t java
    }
    //将结果存放在StringBuilder sb中
    public static String func2(String str1, String str2){
        //将str1转换为字符数组，判断str2是否包含此字符
        //如果不包含，那么就将其存入ArrayList集合当中
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str1.length(); i++) {
            char ch = str1.charAt(i);
            if (!str2.contains(ch+"")){
                sb.append(ch);
            }
        }
        return sb.toString();
    }
    /***
     * 6.删除第一个字符串当中出现的第二个字符串中的字符
     * String str1 = "welcome to java"；
     * String str2 = "come";
     * 输出： wl t java
     * @param args
     */
    public static void main6(String[] args) {
        String str1 = "welcome to java";
        String str2 = "come";
        List<Character> list = func(str1,str2);
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i));//wl t java
        }
        /*System.out.println(list);*/

    }
     public static List<Character> func(String str1,String str2){
         //将str1转换为字符数组，判断str2是否包含此字符
         //如果不包含，那么就将其存入ArrayList集合当中
         List<Character> list = new ArrayList<>();
         for (int i = 0; i < str1.length(); i++) {
             char ch = str1.charAt(i);
             if (!str2.contains(ch+"")){
                list.add(ch);
             }
         }
         return  list;
     }

    /***
     * 5.存放整型数据的List集合，要求使用Collections.sort对List进行排序
     * Collections.sort(list);——默认是升序排序
     * 也可以传入比较器，自定义比较方法
     * @param args
     */
    public static void main5(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(10);
        list.add(2);
        list.add(5);
        list.add(0);
        Collections.sort(list);
        System.out.println(list);//[0, 2, 5, 10]默认是升序
    }
    /***
     * 4.学生对象放在一个List集合中(每个学生拥有姓名name、班级class、成绩属性score);
     * 遍历集合，打印学生对象的属性
     * @param args
     */
    public static void main4(String[] args) {
        Student student1 = new Student("张三","2班",89.2);
        Student student2 = new Student("李四","2班",85.2);
        Student student3 = new Student("张花","2班",86.2);
        Student student4 = new Student("张篮","2班",84.2);
        Student student5 = new Student("张哈哈","2班",79.2);
        List<Student> list = new ArrayList<>();
        list.add(student1);
        list.add(student2);
        list.add(student3);
        list.add(student4);
        list.add(student5);

        //0.直接打印list
        System.out.println(list);
        //1.for循环遍历集合
        System.out.println("====for循环遍历集合====");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //2.foreach打印集合
        System.out.println("===foreach打印集合===");
        for (Student student:list) {
            System.out.println(student);
        }

        System.out.println("===Iterator迭代器遍历集合===");
        //3.Iterator迭代器遍历集合
        Iterator<Student> iterator =list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next() + "");
        }
        /*Student{name='张三', classes='2班', score=89.2}
        Student{name='李四', classes='2班', score=85.2}
        Student{name='张花', classes='2班', score=86.2}
        Student{name='张篮', classes='2班', score=84.2}
        Student{name='张哈哈', classes='2班', score=79.2}*/

    }
    /***
     * 3.Iterator迭代2器——用来打印集合元素
     * @param args
     */
    public static void main3(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(0);
        list.add(3);
        list.add(5);
        list.add(7);
        System.out.println(list);//[0, 3, 5, 7]

        //Interator迭代器——用来打印集合中的元素
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.print(iterator.next() + " ");//0 3 5 7
        }

        iterator.remove();
        System.out.println(list);// [0, 3, 5]

    }
    /***
     * 2.SubList()——截取部分list属于浅拷贝
     * @param args
     */
    public static void main2(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(0);
        list.add(3);
        list.add(5);
        list.add(7);
        /*System.out.println(list);
        System.out.println(list.subList(1, 3));//[3, 5]*/
        List<Integer> list1 = new ArrayList<>();
        list1 = list.subList(1,3);
        System.out.println(list1);//[3,5]

        list1.set(0,88);
        System.out.println(list1);//[88, 5]

        System.out.println(list);//[0, 88, 5, 7]

    }
    /***
     * 1.ArrayList的底层源码解析 ：
     * ArrayList的底层是一个数组，每次存放元素都存放在在了数组的末尾；
     * （1）public boolean add(E e){}——默认将元素添加到数组ArrayList的末尾
     * （2）public void add (int index,E element){}——在指定的index位置存放元素
     *
     * 2.ArrayList底层是数组，那么默认大小是多少？
     * （1）new ArrayList<>() 调用的是不带有参数的构造方法，那么大小默认是0
     * （2）当调用了默认的额构造啊方法之后，在添加第一个元素的时候会进行扩容，第一次扩容的时候大小为10；
     * （3）当后续进行扩容的时候，是以1.5为倍数进行扩容；
     * @param args
     */

    public static void main1(String[] args) {
        List<Integer> list = new ArrayList<>();

        list.add(10);
        System.out.println(list);//[10]

        ArrayList<Integer> arrayList1 = new ArrayList<>();
        arrayList1.add(4);
        arrayList1.add(6);

        list.addAll(arrayList1);
        System.out.println(list);//[10, 4, 6]

        list.remove(0);//删除index 位置的的预算怒
        System.out.println(list);//[4,6]
        System.out.println("==============");

        int ret = list.get(0);
        System.out.println(ret);//4

        list.set(0,99);
        System.out.println(list);//[99, 6]

    }
}
